--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / visualiser-wasm / internal / leaktest / leaktest.go
Displaying Raw • Download
visualiser-wasm/internal/leaktest/leaktest.go dev (c9f60cc5) Text, 717 B
T8b949e// SPDX-License-Identifier: 0BSD
T8b949e// Package leaktest provides lightweight goroutine leak checks without deps.
Tff7b72package Te6edf3leaktest
Tff7b72import Tb4b4b4(
Ta5d6ff"runtime"
Ta5d6ff"testing"
Ta5d6ff"time"
Tb4b4b4)
T8b949e// Check returns a cleanup that fails the test if goroutines leaked.
Tff7b72func Te6edf3CheckTb4b4b4(Te6edf3t Te6edf3testingTb4b4b4.Te6edf3TBTb4b4b4) Tff7b72funcTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3tTb4b4b4.Te6edf3HelperTb4b4b4(Tb4b4b4)
Te6edf3runtimeTb4b4b4.Te6edf3GCTb4b4b4(Tb4b4b4)
Te6edf3timeTb4b4b4.Te6edf3SleepTb4b4b4(T79c0ff5 Tff7b72* Te6edf3timeTb4b4b4.Te6edf3MillisecondTb4b4b4)
Te6edf3before Tff7b72:= Te6edf3runtimeTb4b4b4.Te6edf3NumGoroutineTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72funcTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3tTb4b4b4.Te6edf3HelperTb4b4b4(Tb4b4b4)
Te6edf3deadline Tff7b72:= Te6edf3timeTb4b4b4.Te6edf3NowTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3AddTb4b4b4(T79c0ff500 Tff7b72* Te6edf3timeTb4b4b4.Te6edf3MillisecondTb4b4b4)
Tff7b72var Te6edf3after Tffa657int
Tff7b72for Tb4b4b4{
Te6edf3runtimeTb4b4b4.Te6edf3GCTb4b4b4(Tb4b4b4)
Te6edf3after Tff7b72= Te6edf3runtimeTb4b4b4.Te6edf3NumGoroutineTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3after Tff7b72<= Te6edf3before Tb4b4b4{
Tff7b72return
Tb4b4b4}
Tff7b72if Te6edf3timeTb4b4b4.Te6edf3NowTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3AfterTb4b4b4(Te6edf3deadlineTb4b4b4) Tb4b4b4{
Te6edf3tTb4b4b4.Te6edf3FatalfTb4b4b4(Ta5d6ff"goroutine leak: before=%d after=%d"Tb4b4b4, Te6edf3beforeTb4b4b4, Te6edf3afterTb4b4b4)
Tb4b4b4}
Te6edf3timeTb4b4b4.Te6edf3SleepTb4b4b4(T79c0ff10 Tff7b72* Te6edf3timeTb4b4b4.Te6edf3MillisecondTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────